package com.idp.web.service;

import com.idp.common.base.BaseResult;
import com.idp.common.persistence.Page;
import com.idp.web.dto.DoctorAssignListDTO;
import com.idp.web.dto.DoctorListDTO;
import com.idp.web.entity.Doctors;
import com.idp.web.vo.DoctorSearchVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 医生service接口
 *
 * @author xubinren
 * @version 1.0
 * @date 2018/2/27
 */
public interface IDoctorsService {

    /**
     * 根据条件分页查询医生列表
     *
     * @param doctorSearch 查询信息：姓名/账号/医院名
     * @param page    分页信息
     * @return Page<DoctorListDTO>
     */
    Page<DoctorListDTO> findByPage(DoctorSearchVo doctorSearch, Page<DoctorListDTO> page);

    /**
     * 分配医生--医生列表
     *
     * @param doctorSearch 查询信息
     * @param page         分页信息
     * @return Page<DoctorAssignListDTO>
     */
    Page<DoctorAssignListDTO> assignListPage(DoctorSearchVo doctorSearch, Page<DoctorAssignListDTO> page);

    /**
     * 根据条件查询医生列表
     *
     * @param doctors 查询条件
     * @return List<Doctors>
     */
    List<Doctors> findBySearch(Doctors doctors);

    /**
     * 通过ID查询医生信息
     *
     * @param id 主键id
     * @return Doctors
     */
    Doctors getById(String id);

    /**
     * 新增医生信息
     *
     * @param doctors 医生信息
     * @param doctorSearchVo 验证信息
     * @return BaseResult
     */
    BaseResult add(Doctors doctors, DoctorSearchVo doctorSearchVo);

    /**
     * 修改医生信息
     *
     * @param doctors 医生信息
     * @param doctorSearchVo 验证信息
     * @return BaseResult
     */
    BaseResult update(Doctors doctors, DoctorSearchVo doctorSearchVo);

    /**
     * 根据主键id删除医生信息
     *
     * @param id 主键id
     */
    void delete(String id);

    /**
     * 根据主键id删除医生信息
     * @param doctorSearchVo 信息
     * @return boolean
     */
    boolean delete(DoctorSearchVo doctorSearchVo);

    /**
     * 修改医生的账户状态
     *
     * @param id 主键id
     * @param userId 操作人id
     */
    BaseResult changeStatus(String id, String userId);

}
